//https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca?tpId=13&tqId=23286&ru=/exam/oj/ta&qru=/ta/coding-interviews/question-ranking&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D1%26tpId%3D13%26type%3D13
JZ24 反转链表
// 题目
// 题解(101)
// 讨论(2k)
// 排行
// 面经new
// 简单  通过率：39.94%  时间限制：1秒  空间限制：256M
// 知识点
// 链表
// 描述
// 给定一个单链表的头结点pHead(该头节点是有值的，比如在下图，它的val是1)，长度为n，反转该链表后，返回新链表的表头。


/*
struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};*/
//双指针做法
class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
		if (nullptr == pHead)
		{
			return nullptr;
		}
		if(pHead->next == nullptr)
		{
			return pHead;
		}

		ListNode* pre = nullptr;
		ListNode* cur = pHead;
		
		while(cur)
		{
			ListNode*Next = cur->next;

			cur->next = pre;
			pre = cur;
			cur = Next;
		}


		return pre;

		//错误
		// ListNode* Next = pHead->next;

		// while(Next != nullptr)
		// {

		// 	Next->next = pHead;
		// 	if(pHead)
		// 	pHead = Next;
			
		// }

		// return pHead;

    }
};
